package com.android.awacs.util;

import java.util.StringTokenizer;

import android.os.Bundle;

// Classe lancee pour parser des messages et voir si ils collent au protocole
public class StringParser {

	public final String NORTH = "N"; // utilise pour le GPS : Nord = +, Sud = -
	public final String EAST = "E"; // utilise pour le GPS : Est = +, Ouest = -

	// Extraction du contenu GPS
	public void GPS(String contenu, Bundle b){

		// On parse le message pour extraire son contenu
		int tokennumbers = 0;
		StringTokenizer st = new StringTokenizer(contenu);
		// la tripotee de variables pour decomposer le message GPS
		double lat1 = 0, long1 = 0, temp1, temp2;
		String lat2 = "", long2 = "", local = "Default", model = "Default", lati = "W", longi = "E";

		// rappel : st est formee ainsi : "GPS 44 24.8191N 000 43.2812E INRIA Duemillanove"
		while (st.hasMoreTokens()) {
			switch (tokennumbers) {
			case 0:
				// Degres latitude GPS
				lat1 = Double.parseDouble(st.nextToken());
				break;
			case 1:
				// Donnees latitude complementaires
				lat2 = st.nextToken();
				break;
			case 2:
				// Degres longitude GPS
				long1 = Double.parseDouble(st.nextToken());
				break;
			case 3:
				// Donnees longitude complementaires
				long2 = st.nextToken();
				break;
			case 4:
				// Localisation du GSM (entre en dur)
				local = st.nextToken();
				break;
			case 5:
				// Module du GSM (entre en dur)
				model = st.nextToken();
				break;
			default:
				break;
			}
			tokennumbers++;
		}

		// On extrait la derniere lettre des donnees complementaires (Nord/Sud)
		lati = lat2.substring(lat2.length() - 1, lat2.length());
		lat2 = lat2.substring(0, lat2.length() - 1);
		longi = long2.substring(long2.length() - 1, long2.length());
		long2 = long2.substring(0, long2.length() - 1);

		// Calcul de la latitude dans un format accepte par Google Map
		temp1 = Double.parseDouble(lat2);
		temp2 = temp1 / 60;
		if (lati.compareToIgnoreCase(NORTH) == 0)
			lat2 = String.valueOf(lat1 + temp2);
		else
			lat2 = String.valueOf(-(lat1 + temp2));

		// Calcul de la longitude dans un format accepte par Google Map
		temp1 = Double.parseDouble(long2);
		temp2 = temp1 / 60;
		if (longi.compareToIgnoreCase(EAST) == 0)
			long2 = String.valueOf(long1 + temp2);
		else
			long2 = String.valueOf(-(long1 + temp2));

		// remplissage du bundle
		b.putString("Latitude", lat2);
		b.putString("Longitude", long2);
		b.putString("Localisation", local);
		b.putString("Model", model);
	}
}